import cn.neu.aimp.iot.constant.Constant;
import cn.neu.aimp.iot.entity.Device;
import cn.neu.aimp.iot.entity.RealplayConfig;
import cn.neu.aimp.iot.module.LoginAndOutModule;
import cn.neu.aimp.iot.module.RealPlayModule;
import cn.neu.aimp.iot.storage.ImgStorage;
import cn.neu.aimp.iot.storage.PtzStorage;
import cn.neu.aimp.iot.util.ConfigureTool;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;

public class Demo {
    public static void main(String[] args) throws IOException, InterruptedException {
        //设置配置文件路径（可省略，使用默认配置）
        ConfigureTool.setConfigureFilePath(System.getProperty("user.dir") + "src\\main\\resources\\configuration.xml");
        //设备登录，获取设备实例
        Device device = LoginAndOutModule.login(Constant.HAIKANG, "192.168.1.61", 8000, "admin", "abc123..", null);
        //调用实时播放函数，开始实时播放。主要输入是设备实例获得的设备ID，其余包括实时播放配置、转发流媒体配置、云台控制配置都是可选。
        Object[] objects = RealPlayModule.postTasks(device.getDeviceId(), new RealplayConfig(), null, null);
        //实时播放函数的返回值是三项项，一项是图片存储仓库，即为一帧一帧的数据转化为的图片，另一项是控制指令仓库，主要是将处理后的目标位置和标签返回，一遍自动化云台控制。第三项是输出直流，用于前端直接读取展示（相关解析代码见项目videoservice）。
        //注意当在实时播放配置中设置没有开启获取图片流、不自动进行云台控制和不开启获取直连流时，则返回值对应那一项为NULL。
        ImgStorage imgStorage = (ImgStorage) objects[0];
        PtzStorage ptzStorage = (PtzStorage) objects[1];
        InputStream directCurrent = (PipedInputStream) objects[2];
        for (int i=0;i<1000;i++) {
            //获取图片
            BufferedImage bufferedImage = imgStorage.consumePendingImg();
            //处理图片，eg:存储，检测等
            ImageIO.write(bufferedImage, "jpg", new File("E:/test/" + i + ".jpg"));
            //处理完图片以后，将图片返回给图片仓库，存入已处理图片仓库。
            imgStorage.produceProcessedImg(bufferedImage);
            //可选 如果开启自动云台控制 则将处理后的检测信息封装为DetectedObj链表范围给控制指令仓库。
            ptzStorage.produce("", 0, 0);
        }

    }
}
